/**
 * Smart Chat Reply - 核心类型定义
 * 
 * 本文件定义了系统中使用的所有核心接口和类型
 * Requirements: 5.1, 5.2
 */

// ============================================
// 情感类型定义
// ============================================

/**
 * 情感基调类型
 * 用于分类聊天情感和表情包推荐
 */
export type EmotionalTone = 
  | 'happy'      // 开心
  | 'sad'        // 悲伤
  | 'comfort'    // 安慰
  | 'funny'      // 调侃/幽默
  | 'grateful'   // 感激
  | 'apologetic' // 道歉
  | 'neutral';   // 中性

// ============================================
// 聊天消息相关类型
// ============================================

/**
 * 单条聊天消息
 */
export interface ChatMessage {
  /** 发送者名称 */
  sender: string;
  /** 消息内容 */
  content: string;
  /** 消息时间戳（可选） */
  timestamp?: Date;
  /** 是否为当前用户发送 */
  isUser: boolean;
}

/**
 * 解析后的聊天记录
 */
export interface ParsedChat {
  /** 消息列表，按时间顺序排列 */
  messages: ChatMessage[];
  /** 参与者列表 */
  participants: string[];
  /** 整体情感基调 */
  emotionalTone: EmotionalTone;
}

/**
 * 验证结果
 */
export interface ValidationResult {
  /** 是否验证通过 */
  valid: boolean;
  /** 错误信息（验证失败时） */
  error?: string;
}

// ============================================
// 回复生成相关类型
// ============================================

/**
 * 回复目标类型
 */
export type ReplyGoal = 
  | 'comfort'      // 安慰
  | 'decline'      // 拒绝
  | 'thank'        // 感谢
  | 'apologize'    // 道歉
  | 'congratulate' // 祝贺
  | 'custom';      // 自定义

/**
 * 回复风格
 */
export type ReplyStyle = 'formal' | 'casual';

/**
 * 回复生成选项
 */
export interface ReplyOptions {
  /** 回复目标（可选） */
  goal?: ReplyGoal;
  /** 回复风格 */
  style: ReplyStyle;
  /** 最大长度限制（可选） */
  maxLength?: number;
}

/**
 * 生成的回复
 */
export interface GeneratedReply {
  /** 回复唯一标识 */
  id: string;
  /** 回复内容 */
  content: string;
  /** 回复风格 */
  style: ReplyStyle;
  /** 情感基调 */
  emotionalTone: EmotionalTone;
  /** 精简版本（当内容超过200字符时提供） */
  shortVersion?: string;
}

// ============================================
// 表情包相关类型
// ============================================

/**
 * 表情包
 */
export interface Emoji {
  /** 表情包唯一标识 */
  id: string;
  /** 表情包图片URL */
  url: string;
  /** 情感分类 */
  category: EmotionalTone;
  /** 标签列表 */
  tags: string[];
  /** 描述 */
  description: string;
}

/**
 * 表情包推荐结果
 */
export interface EmojiRecommendation {
  /** 推荐的表情包列表 */
  emojis: Emoji[];
  /** 情感分类 */
  category: EmotionalTone;
  /** 是否为默认推荐（无匹配时返回） */
  isDefault: boolean;
}

/**
 * 表情包数据库结构
 */
export interface EmojiDatabase {
  /** 所有表情包 */
  emojis: Emoji[];
  /** 按情感分类的表情包ID映射 */
  categories: Record<EmotionalTone, string[]>;
}

// ============================================
// 任务检测相关类型
// ============================================

/**
 * 任务优先级
 */
export type TaskPriority = 'high' | 'medium' | 'low';

/**
 * 检测到的任务
 */
export interface DetectedTask {
  /** 任务唯一标识 */
  id: string;
  /** 任务描述 */
  description: string;
  /** 参与者列表 */
  participants: string[];
  /** 截止时间（可选） */
  deadline?: Date;
  /** 优先级 */
  priority: TaskPriority;
}

/**
 * 计划步骤
 */
export interface PlanStep {
  /** 步骤顺序 */
  order: number;
  /** 步骤描述 */
  description: string;
  /** 负责人（可选） */
  assignee?: string;
  /** 预估时间（可选） */
  estimatedTime?: string;
  /** 截止时间（可选） */
  deadline?: Date;
}

/**
 * 任务计划
 */
export interface TaskPlan {
  /** 关联的任务ID */
  taskId: string;
  /** 计划标题 */
  title: string;
  /** 计划步骤列表 */
  steps: PlanStep[];
  /** 计划摘要 */
  summary: string;
  /** 可分享的文本版本 */
  shareableText: string;
}

// ============================================
// 截图解析相关类型
// ============================================

/**
 * 截图解析结果
 */
export interface ScreenshotParseResult {
  /** 是否解析成功 */
  success: boolean;
  /** OCR 识别的原始文本 */
  rawText: string;
  /** 解析后的聊天记录（成功时） */
  parsedChat: ParsedChat | null;
  /** 识别置信度 (0-1) */
  confidence: number;
  /** 是否需要用户确认（低置信度时） */
  needsConfirmation: boolean;
  /** 错误信息（失败时） */
  error?: string;
}

// ============================================
// API 相关类型
// ============================================

/**
 * API 消息角色
 */
export type ApiMessageRole = 'user' | 'assistant' | 'system';

/**
 * API 消息内容部分（多模态）
 */
export interface ContentPart {
  /** 内容类型 */
  type: 'text' | 'image_url';
  /** 文本内容（type为text时） */
  text?: string;
  /** 图片URL（type为image_url时） */
  image_url?: { url: string };
}

/**
 * API 聊天消息
 */
export interface ApiChatMessage {
  /** 消息角色 */
  role: ApiMessageRole;
  /** 消息内容（字符串或多模态内容） */
  content: string | ContentPart[];
}

/**
 * API 配置
 */
export interface ApiConfig {
  /** API 地址 */
  apiUrl: string;
  /** API 密钥 */
  apiKey: string;
  /** 模型名称 */
  model: string;
  /** 最大 token 数 */
  maxTokens: number;
  /** 温度参数 */
  temperature: number;
}

/**
 * 通用 API 响应
 */
export interface ApiResponse<T> {
  /** 是否成功 */
  success: boolean;
  /** 响应数据（成功时） */
  data?: T;
  /** 错误信息（失败时） */
  error?: string;
}

// ============================================
// 应用状态类型
// ============================================

/**
 * 应用全局状态
 */
export interface AppState {
  /** 聊天记录输入 */
  chatInput: string;
  /** 解析后的聊天记录 */
  parsedChat: ParsedChat | null;
  /** 生成的回复列表 */
  generatedReplies: GeneratedReply[];
  /** 推荐的表情包 */
  recommendedEmojis: EmojiRecommendation | null;
  /** 检测到的任务列表 */
  detectedTasks: DetectedTask[];
  /** 生成的计划列表 */
  generatedPlans: TaskPlan[];
  /** 是否正在加载 */
  isLoading: boolean;
  /** 错误信息 */
  error: string | null;
}

/**
 * 用户偏好设置
 */
export interface UserPreferences {
  /** 默认回复风格 */
  defaultStyle: ReplyStyle;
  /** 偏好的情感类型 */
  preferredEmotionalTones: EmotionalTone[];
  /** 语言设置 */
  language: 'zh' | 'en';
}
